package com.bbva.kyfb.kyfbdaofcimpl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.Query;

import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.bbva.jee.arq.spring.core.gce.ExcepcionEjecucionAplicacion;
import com.bbva.kyfb.kyfbdaofc.IFicherosDao;
import com.bbva.kyfb.kyfbdto.firmas.filtros.FiltroFicheros;
import com.bbva.kyfb.kyfbjpatlbh.dominiotlbh.Ttlsbfua;
import com.bbva.kyfb.kyfbutils.dao.DaoUtils;

/**
 * The Class ServicioFicherosDaoImpl.
 *
 * @author xe20973
 */
@Component(value="servicioFicherosDao")
public class ServicioFicherosDaoImpl extends ServicioDaoImpl implements IFicherosDao {

	/** The Constant ESTADOS_FIJOS. */
	private static final String[] ESTADOS_FIJOS = new String[]{"001", "002", "003", "011"};
	
	/**
	 * {@inheritDoc}
	 */
	@Override
	@Transactional(value="tlbh")
	public void deleteFicheroConfeccion(final String codClienteCash, final String claseOrden, final String idOrden, final Ttlsbfua fua) throws ExcepcionEjecucionAplicacion {

		Map<Integer, Object> paramValues = new HashMap<Integer, Object>();
		StringBuilder filteredQuery = new StringBuilder("UPDATE TLSB.TTLSBCAB ");
		filteredQuery.append("SET COD_ESTACASH = '999' ");
		
		filteredQuery.append(DaoUtils.addFilter("COD_CLIECASH", "=", codClienteCash, paramValues, null, null));
		filteredQuery.append(DaoUtils.addFilter("COD_CLASEORD", "=", claseOrden, paramValues, true, null));
		filteredQuery.append(DaoUtils.addFilter("COD_IDORDEN", "=", idOrden, paramValues, true, null));
		filteredQuery.append(DaoUtils.addInClause("COD_ESTACASH", ESTADOS_FIJOS, paramValues, true, null));

		Query q = getEm().createNativeQuery(filteredQuery.toString());
		DaoUtils.addQueryParams(paramValues, q);
		
		int resultado=q.executeUpdate();
		DaoUtils.oneRecordUpdated(resultado);
		
		fua.persist();
		fua.flush();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<Ttlsbfua> findAuditoriaComponenteConfeccion (final String codClienteCash, final String claseOrden, final String idOrden, final String [] estados)throws ExcepcionEjecucionAplicacion {
		return findAuditoriaComponente(codClienteCash, claseOrden, idOrden, estados, ESTADOS_FIJOS);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List<Object[]> findComponentesConfeccionReferencia(final String codClienteCash, final FiltroFicheros filtro, final boolean ordenante) throws ExcepcionEjecucionAplicacion{
		return findReferencia(codClienteCash, filtro, ordenante, ESTADOS_FIJOS, null, true);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public int getTotalComponentesConfeccionReferencia(String codClienteCash, FiltroFicheros filtro, boolean ordenante) throws ExcepcionEjecucionAplicacion {
		return getTotalComponentesReferencia(codClienteCash,filtro,ordenante,ESTADOS_FIJOS, true);
	}
	
}
